/**
 * 
 */
package com.rtsp.tool.test;

import org.quartz.Job;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.Scheduler;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

import com.alibaba.fastjson.JSON;

/**
 * @author w.weizhen
 *
 */
public class QuartzMain implements Job{
	
	/**
	 * @param args
	 */
	public static void main(String[] args) 
	{
		try {
//			// 获取到一个StdScheduler, StdScheduler其实是QuartzScheduler的一个代理
//	        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
//	        // 启动Scheduler
//	        scheduler.start();
//	        
//	        
//	        // 新建一个Job, 指定执行类是QuartzTest(需实现Job), 指定一个K/V类型的数据, 指定job的name和group
//            JobDetail job = newJob(QuartzMain.class)
//                    .usingJobData("jobData", "test")
//                    .withIdentity("myJob", "group1")
//                    .build();
            // 新建一个Trigger, 表示JobDetail的调度计划, 这里的cron表达式是 每10秒执行一次
//            Trigger trigger = newTrigger()
//                    .withIdentity("myTrigger", "group1")
//                    .startNow()
//                    .withSchedule(cronSchedule("0/10 * * * * ?"))
//                    .build();
            
			
			JobDetail job = JobBuilder.newJob(QuartzMain.class).build();
			
//            Quartz触发器
//            定义Quartz触发器，当Quartz运行在上面的Quartz作业。
//            像老版本的Quartz，仍然有两种类型的触发器在Quartz2，但API有些变化：
//                SimpleTrigger – 允许设置开始时间，结束时间，重复间隔。
//                CronTrigger – 允许UNIX cron表达式来指定日期和时间来运行作业。
//          SimpleTrigger – 每5秒运行。
            Trigger trigger = TriggerBuilder
        		.newTrigger()
        		.withSchedule(
        		    SimpleScheduleBuilder.simpleSchedule()
        			.withIntervalInSeconds(2).repeatForever())
        		.build();
            
//	        //  CronTrigger – 每5秒运行。
//            Trigger trigger = TriggerBuilder
//        		.newTrigger()
//        		.withSchedule(
//        			CronScheduleBuilder.cronSchedule("0/2 * * * * ?"))
//        		.build();
            
            // Scheduler
            // 调度类链接“工作”和“触发器”到一起，并执行它。
            Scheduler scheduler = new StdSchedulerFactory().getScheduler();
        	scheduler.start();
        	scheduler.scheduleJob(job, trigger);
        	scheduler.scheduleJob(job, trigger);
        	scheduler.scheduleJob(job, trigger);
	        
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	private static int num = 0;
	
	@Override
	public void execute(JobExecutionContext context) throws JobExecutionException 
	{
		++num;
		System.err.println("start "+num+" 定时任务: " + JSON.toJSONString( context.getJobDetail()));
		try  
        {
            Thread.sleep(10000);  
        } catch (InterruptedException e)  
        {  
            e.printStackTrace();  
        }
		System.err.println("end "+num+" 定时任务: " + JSON.toJSONString( context.getJobDetail()));
	}
	
}